package cn.niitcxl.controller;

import cn.niitcxl.domain.adminUser;
import cn.niitcxl.domain.eduFile;
import cn.niitcxl.services.FilesServices;
import cn.niitcxl.services.OssService;
import cn.niitcxl.utils.R;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;

@RestController
@RequestMapping("/files")
public class FileController {

    @Autowired
    private FilesServices filesServices;

    @Autowired
    private OssService ossService;

    /**
     *查询所有文件的方法
     * @return
     */
    @GetMapping
    public R getAllFiles(){
        //查询所有文件的方法
        List<eduFile> list = filesServices.list();
        return new R().ok().data("list",list);
    }

    /**
     *根据文件分类查询所有文件带条件分页的方法
     * @return
     */
    @GetMapping("/getFileTypePageCondition")
    public R getAllFilesByFileTypes(
            @RequestParam("TypeId") String fileType,
            @RequestParam("page") Long currentPage,
            @RequestParam("pageSize") Long pageSize,
            @RequestParam(required = false)String fileName
            ){
        //据文件分类查询所有文件的方法
       IPage<eduFile> iPage =  filesServices.getPageByCondition(fileType,currentPage,pageSize,fileName);

        return new R().ok().data("list",iPage);
    }

    /**
     * 上传文件的方法
     * @param form  eduFile 实体类
     * @return
     */
    @PostMapping("/upload")
    public R saveFile(@RequestBody(required = true) eduFile form){
        if (form!=null){//当上传的表单不为空才能进行上传
            String fileName = form.getFileName();
            String fileType = form.getFileType();
            String fileDescription = form.getFileDescription();
            String filePath = form.getFilePath();
            if (Strings.isEmpty(fileName)){
                return new R().error().message("请填写文件名称");
            }else if (Strings.isEmpty(fileType)){
                return new R().error().message("请填写文件类型");
            }else if (Strings.isEmpty(fileDescription)){
                return new R().error().message("请填写文件描述");
            }else if (Strings.isEmpty(filePath)){
                return new R().error().message("未选中任何上传文件");
            }
            filesServices.save(form);
            return new R().ok();
        }
    return new R().error().message("请填写上传表单!");
    }

    /**
     * 根据id删除文件的方法
     * @param fileId
     * @return
     */
    @DeleteMapping("/deleteByPath")
    public R deleteFileByPath(@RequestParam("fileId")String fileId, HttpSession session){
        adminUser userAdmin = (adminUser) session.getAttribute("userAdmin");
        if (userAdmin!=null){
            //根据id查询 数据库中的file
            eduFile file = filesServices.getById(fileId);
            String path = file.getFilePath();
            //当上传文件的下载url不为空时候 再进行oss的删除
            if (Strings.isNotEmpty(path)){
                //根据获取到的文件路径删除 oss中的文件
                ossService.deleteFile(path);
            }
            //再根据id删除数据库中的数据
            filesServices.removeById(file.getFileId());
            return new R().ok();
        }else {
            return new R().error();
        }

    }

    /**
     * 根据id做数据的回显
     * @param fileId
     * @return
     */
    @GetMapping("/getFileById")
    public R getFileById(@RequestParam("id") String fileId){
        //调用业务层 查询file 做数据的回显
        eduFile file = filesServices.getById(fileId);
        //返回数据
        return new R().ok().data("file",file);
    }

    @PutMapping("/updateFile")
    public R update(@RequestBody() eduFile form){
        filesServices.updateById(form);
        return new R().ok();
    }


}